Express.js কি?
Express.js ( Express) API Node.js .
এটিকে প্রায়ই Node.js-এর জন্য ডি ফ্যাক্টো স্ট্যান্ডার্ড সার্ভার ফ্রেমওয়ার্ক বলা হয়।
মূল বৈশিষ্ট্য:
ন্যূনতম এবং নমনীয়
শুধুমাত্র মৌলিক বৈশিষ্ট্য প্রদান করে
কোন মন্তব্য নেই
আপনি আপনার আবেদন গঠন কিভাবে সিদ্ধান্ত
হালকা এবং দ্রুত
নিম্ন ওভারহেড এবং উচ্চ গতি কর্মক্ষমতা
মিডলওয়্যারের মাধ্যমে এক্সটেনসিবল
মিডলওয়্যার ফাংশনের মাধ্যমে কার্যকারিতা প্রসারিত করুন
দারুণ পরিবেশ
প্লাগইন এবং এক্সটেনশনের বিশাল ইকোসিস্টেম
কেন Express.js বেছে নিন?
এক্সপ্রেস Node.js বৈশিষ্ট্যগুলিকে মাস্ক না করে মৌলিক ওয়েব অ্যাপ্লিকেশন বৈশিষ্ট্যগুলির একটি পাতলা স্তর সরবরাহ করে।
এটি প্রদান করে:
- একটি শক্তিশালী রাউটিং সিস্টেম
- HTTP সাহায্যকারী (পুনঃনির্দেশ, ক্যাশিং, ইত্যাদি)
- HTTP অনুরোধে সাড়া দেওয়ার জন্য মিডলওয়্যার সমর্থন
- ডায়নামিক HTML রেন্ডারিংয়ের জন্য একটি টেমপ্লেট ইঞ্জিন
- মিডলওয়্যার পরিচালনার ত্রুটি৷
এক্সপ্রেস দিয়ে শুরু করা
এক্সপ্রেস যে কোনো Node.js প্রকল্পে যোগ করা যেতে পারে। একটি নতুন এক্সপ্রেস অ্যাপ কীভাবে শুরু করবেন তা এখানে।
পূর্বশর্ত
আপনি শুরু করার আগে, নিশ্চিত করুন যে আপনার আছে:
- Node.js (v14.0.0 )
- npm (যা Node.js এর সাথে আসে) বা সুতা
- একটি কোড সম্পাদক (ভিএস কোড, ওয়েবস্টর্ম, ইত্যাদি)
এক্সপ্রেস ইনস্টল করা হচ্ছে
আপনার Node.js অ্যাপ্লিকেশনে এক্সপ্রেস ব্যবহার করতে, আপনাকে প্রথমে এটি ইনস্টল করতে হবে:
npm install express
এক্সপ্রেস ইনস্টল করুন এবং আপনার package.json নির্ভরতায় এটি সংরক্ষণ করুন:
npm install express --save
হ্যালো ওয়ার্ল্ড উদাহরণ
আসুন এক্সপ্রেসের সাথে একটি সাধারণ "হ্যালো ওয়ার্ল্ড" অ্যাপ্লিকেশন তৈরি করি।
এই উদাহরণটি একটি এক্সপ্রেস অ্যাপ্লিকেশনের মৌলিক কাঠামো প্রদর্শন করে।
মূল উপাদান:
- এক্সপ্রেস মডিউল আমদানি করা হচ্ছে
- একটি এক্সপ্রেস অ্যাপ্লিকেশন উদাহরণ তৈরি করা হচ্ছে
- রুট সংজ্ঞায়িত করা
- সার্ভার শুরু হচ্ছে
const express = require('express');
const app = express();
const port = 8080;
// Define a route for GET requests to the root URL
app.get('/', (req, res) => {
res.send('Hello World from Express!');
});
// Start the server
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
এই কোডটি app.js নামে একটি ফাইলে সংরক্ষণ করুন এবং Node.js দিয়ে চালান:
node app.js
তারপর, আপনার ব্রাউজার খুলুন এবং http://localhost:8080 এ যান এবং "হ্যালো ওয়ার্ল্ড" বার্তাটি দেখুন।
মৌলিক রাউটিং
রাউটিং বলতে বোঝায় কিভাবে একটি অ্যাপ্লিকেশন বিভিন্ন HTTP পদ্ধতি (GET, POST, PUT, DELETE, ইত্যাদি) ব্যবহার করে নির্দিষ্ট এন্ডপয়েন্ট (URI) তে ক্লায়েন্টের অনুরোধে সাড়া দেয়।
এক্সপ্রেস HTTP পদ্ধতির সাথে যুক্ত রুট সংজ্ঞায়িত করার জন্য সহজ পদ্ধতি প্রদান করে:
- app.get()- GET অনুরোধগুলি পরিচালনা করুন
- app.post()- POST অনুরোধগুলি পরিচালনা করুন
- app.put()- PUT অনুরোধগুলি পরিচালনা করুন
- app.delete()- মুছে ফেলার অনুরোধগুলি পরিচালনা করুন
- app.all()- সমস্ত HTTP পদ্ধতি পরিচালনা করুন
const express = require('express');
const app = express();
const port = 8080;
// Respond to GET request on the root route
app.get('/', (req, res) => {
res.send('GET request to the homepage');
});
// Respond to POST request on the root route
app.post('/', (req, res) => {
res.send('POST request to the homepage');
});
// Respond to GET request on the /about route
app.get('/about', (req, res) => {
res.send('About page');
});
// Catch all other routes
app.all('*', (req, res) => {
res.status(404).send('404 - Page not found');
});
// Start the server
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
মূল পরামিতি
রুট প্যারামিটারের নাম দেওয়া হয় URL সেগমেন্ট যা URL-এর নির্দিষ্ট অবস্থানে মান ধরে রাখে।
এগুলি একটি কোলন দিয়ে নির্দিষ্ট করা হয়েছে: পথের উপসর্গ।
উদাহরণ: /users/:userId/books/:bookId
এই উদাহরণে, userId এবং bookId হল রুট প্যারামিটার req.params এর মাধ্যমে অ্যাক্সেসযোগ্য।
const express = require('express');
const app = express();
const port = 8080;
// Route with parameters
app.get('/users/:userId/books/:bookId', (req, res) => {
// Access parameters using req.params
res.send(`User ID: ${req.params.userId}, Book ID: ${req.params.bookId}`);
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
ক্যোয়ারী প্যারামিটার
একটি URL এ প্যারামিটার কোয়েরি? কী-মানের জোড়া যা পরে প্রদর্শিত হয়
এগুলি স্বয়ংক্রিয়ভাবে এক্সপ্রেস দ্বারা পার্স করা হয় এবং req.query-এ উপলব্ধ৷
উদাহরণ URL: http://example.com/search?q=express&page=2
এই URL-এ, q=express এবং page=2 হল ক্যোয়ারী প্যারামিটার যা req.query.q এবং req.query.page হিসাবে অ্যাক্সেসযোগ্য।
const express = require('express');
const app = express();
const port = 8080;
// Route handling query parameters
app.get('/search', (req, res) => {
// Access query parameters using req.query
const { q, category } = req.query;
res.send(`Search query: ${q}, Category: ${category || 'none'}`);
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
এই মত একটি URL দিয়ে এই রুট অ্যাক্সেস করুন: http://localhost:8080/search?q=express&category=framework
এক্সপ্রেস মধ্যে মিডলওয়্যার
মিডলওয়্যার ফাংশন হল এক্সপ্রেস অ্যাপ্লিকেশনগুলির মেরুদণ্ড।
তাদের অ্যাক্সেস আছে:
- অনুরোধ বস্তু (অনুরোধ)
- উত্তরের অর্থ (res)
- স্ট্যাকের পরবর্তী মিডলওয়্যার ফাংশন (পরবর্তী)
মিডলওয়্যার করতে পারে:
- যেকোনো কোড চালান
- অনুরোধ এবং প্রতিক্রিয়া বস্তু পরিবর্তন করুন
- অনুরোধ-প্রতিক্রিয়া চক্রটি সম্পূর্ণ করুন
- স্ট্যাকের পরবর্তী মিডলওয়্যারটিকে কল করুন
অন্তর্নির্মিত মিডলওয়্যার
এক্সপ্রেস বেশ কয়েকটি দরকারী মিডলওয়্যার ফাংশন অন্তর্ভুক্ত করে:
- express.json()- JSON অনুরোধ সংস্থাগুলিকে পার্স করুন৷
- express.urlencoded()- ইউআরএল-ট্যাগযুক্ত অনুরোধ সংস্থাগুলিকে পার্স করুন৷
- express.static()- স্ট্যাটিক ফাইল পরিবেশন
- express.Router()- মডুলার রুট হ্যান্ডলার তৈরি করুন
const express = require('express');
const app = express();
const port = 8080;
// Middleware to parse JSON request bodies
app.use(express.json());
// Middleware to parse URL-encoded request bodies
app.use(express.urlencoded({ extended: true }));
// Middleware to serve static files from a directory
app.use(express.static('public'));
// POST route that uses JSON middleware
app.post('/api/users', (req, res) => {
// req.body contains the parsed JSON data
console.log(req.body);
res.status(201).json({ message: 'User created', user: req.body });
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
এক্সপ্রেস এ সমস্যা হ্যান্ডলিং
এক্সপ্রেসে ত্রুটি হ্যান্ডলিং চারটি আর্গুমেন্ট সহ বিশেষ মিডলওয়্যার ফাংশনের মাধ্যমে করা হয়:
(err, req, res, next).
মূল পয়েন্ট:
- ত্রুটি-হ্যান্ডলার মিডলওয়্যারের অবশ্যই চারটি আর্গুমেন্ট থাকতে হবে
- এটি অন্যান্য app.use() এবং রুট কলের পরে সংজ্ঞায়িত করা উচিত
- আপনার একাধিক ত্রুটি-হ্যান্ডলিং মিডলওয়্যার ফাংশন থাকতে পারে
- পরবর্তী ত্রুটি হ্যান্ডলারে ত্রুটিগুলি পাস করতে পরবর্তী(ত্রুটি) ব্যবহার করুন
এক্সপ্রেস অনুরোধ প্রক্রিয়াকরণের সময় ত্রুটিগুলি ধরতে একটি ডিফল্ট ত্রুটি হ্যান্ডলারের সাথে আসে:
const express = require('express');
const app = express();
const port = 8080;
// Route that may throw an error
app.get('/error', (req, res) => {
// Simulating an error
throw new Error('Something went wrong!');
});
// Route that uses next(error) for asynchronous code
app.get('/async-error', (req, res, next) => {
// Simulating an asynchronous operation that fails
setTimeout(() => {
try {
// Something that might fail
const result = nonExistentFunction(); // This will throw an error
res.send(result);
}
catch (error) {
next(error); // Pass errors to Express
}
}, 100);
});
// Custom error handling middleware
// Must have four parameters to be recognized as an error handler
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
স্ট্যাটিক ফাইল পরিবেশন করা
এক্সপ্রেস বিল্ট-ইন express.static মিডলওয়্যার ব্যবহার করে স্ট্যাটিক ফাইল যেমন ইমেজ, CSS এবং জাভাস্ক্রিপ্ট পরিবেশন করতে পারে।
সর্বোত্তম অনুশীলন:
- একটি ডেডিকেটেড ডিরেক্টরিতে স্ট্যাটিক ফাইল রাখুন (সাধারণত পাবলিক বা স্ট্যাটিক)
- আপনার শিকড়ের আগে আদর্শ মিডলওয়্যার লোড করুন
- ভালো পারফরম্যান্সের জন্য উৎপাদনে একটি CDN ব্যবহার করার কথা বিবেচনা করুন
- স্ট্যাটিক সম্পদের জন্য উপযুক্ত ক্যাশে হেডার সেট করুন
চিত্র, CSS ফাইল এবং জাভাস্ক্রিপ্ট ফাইলের মতো স্ট্যাটিক ফাইল পরিবেশন করতে বিল্ট-ইন express.static মিডলওয়্যার ফাংশন ব্যবহার করুন:
const express = require('express');
const path = require('path');
const app = express();
const port = 8080;
// Serve static files from the 'public' directory
app.use(express.static('public'));
// You can also specify a virtual path prefix
app.use('/static', express.static('public'));
// Using absolute path (recommended)
app.use('/assets', express.static(path.join(__dirname, 'public')));
app.get('/', (req, res) => {
res.send(`
Static Files Example
`);
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
এটি ধরে নেয় যে আপনার স্ক্রিপ্টের মতো একই ডিরেক্টরিতে চিত্র, CSS এবং জাভাস্ক্রিপ্ট ফাইলগুলির জন্য সাবডিরেক্টরি সহ সর্বজনীন নামে একটি ডিরেক্টরি রয়েছে৷
পৃথক ফাইলে রুট করা
একটি ভাল সেটআপের জন্য, পৃথক ফাইলগুলিতে রুটগুলি সংজ্ঞায়িত করতে এক্সপ্রেস রাউটার ব্যবহার করুন:
routes/users.js
const express = require('express');
const router = express.Router();
// Middleware specific to this router
router.use((req, res, next) => {
console.log('Users Router Time:', Date.now());
next();
});
// Define routes
router.get('/', (req, res) => {
res.send('Users home page');
});
router.get('/:id', (req, res) => {
res.send(`User profile for ID: ${req.params.id}`);
});
module.exports = router;
routes/products.js
const express = require('express');
const router = express.Router();
// Define routes
router.get('/', (req, res) => {
res.send('Products list');
});
router.get('/:id', (req, res) => {
res.send(`Product details for ID: ${req.params.id}`);
});
module.exports = router;
app.js (প্রধান ফাইল)
const express = require('express');
const usersRouter = require('./routes/users');
const productsRouter = require('./routes/products');
const app = express();
const port = 8080;
// Use the routers
app.use('/users', usersRouter);
app.use('/products', productsRouter);
app.get('/', (req, res) => {
res.send('Main application home page');
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
টেমপ্লেট ইঞ্জিন
এক্সপ্রেস ডায়নামিক এইচটিএমএল তৈরি করতে টেমপ্লেট ইঞ্জিনগুলির সাথে কনফিগার করা যেতে পারে:
const express = require('express');
const app = express();
const port = 8080;
// Set the view engine to EJS
app.set('view engine', 'ejs');
// Set the directory where templates are located
app.set('views', './views');
// Route that renders a template
app.get('/', (req, res) => {
const data = {
title: 'Express Template Example',
message: 'Hello from EJS!',
items: ['Item 1', 'Item 2', 'Item 3']
};
// Renders the views/index.ejs template
res.render('index', data);
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
এই উদাহরণটি ব্যবহার করার জন্য, আপনাকে EJS টেমপ্লেট ইঞ্জিন ইনস্টল করতে হবে:
npm install ejs
এবং views/index.ejs এ একটি ফাইল তৈরি করুন:
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
</head>
<body>
<h1><%= title %></h1>
<p><%= message %></p>
<h2>Items:</h2>
<ul>
<% items.forEach(function(item) { %>
<li><%= item %></li>
< % }); %>
</ul>
</body>
</html>
এক্সপ্রেস অ্যাপ্লিকেশন জেনারেটর
এক্সপ্রেস অ্যাপ্লিকেশন জেনারেটর হল একটি টুল যা আপনাকে দ্রুত একটি এক্সপ্রেস অ্যাপ্লিকেশন কঙ্কাল তৈরি করতে সাহায্য করে।
মূল বৈশিষ্ট্য:
- একটি সুগঠিত অ্যাপ্লিকেশন তৈরি করে
- উন্নয়নের পরিবেশ প্রতিষ্ঠা করে
- সাধারণ মিডলওয়্যার কনফিগার করে
- ত্রুটি হ্যান্ডলিং অন্তর্ভুক্ত
- বিভিন্ন টেমপ্লেট ইঞ্জিন সমর্থন করে
ইনস্টলেশন: npm install -g express-generator
ব্যবহার: express --view=pug myapp
এক্সপ্রেস একটি অ্যাপ্লিকেশন জেনারেটর সরঞ্জাম সরবরাহ করে যা আপনাকে দ্রুত একটি অ্যাপ্লিকেশন কঙ্কাল তৈরি করতে সহায়তা করে:
# Install the generator globally
npm install -g express-generator
# Create a new Express application
express --view=ejs myapp
# Navigate to the app directory
cd myapp
# Install dependencies
npm install
# Start the app
npm start
এটি নিম্নলিখিত ডিরেক্টরি কাঠামোর সাথে একটি অ্যাপ্লিকেশন তৈরি করে:
myapp/
├── app.js
├── bin/
│ └── www
├── package.json
├── public/
│ ├── images/
│ ├── javascripts/
│ └── stylesheets/
│ └── style.css
├── routes/
│ ├── index.js
│ └── users.js
└── views/
├── error.ejs
└── index.ejs
Express.js সেরা অভ্যাস
শক্তিশালী, রক্ষণাবেক্ষণযোগ্য এক্সপ্রেস অ্যাপ্লিকেশন তৈরি করতে এই সেরা অনুশীলনগুলি অনুসরণ করুন:
প্রকল্প কাঠামো
বৈশিষ্ট্য বা উপাদান দ্বারা আপনার কোড সংগঠিত
পরিবেশ পরিবর্তনশীল
কনফিগারেশনের জন্য dotenv ব্যবহার করুন
ত্রুটি হ্যান্ডলিং
সেন্ট্রালাইজ ত্রুটি হ্যান্ডলিং
লগিং
মরগান বা উইনস্টনের মতো একটি লগিং লাইব্রেরি ব্যবহার করুন
নিরাপত্তা
নিরাপত্তার সর্বোত্তম অনুশীলনগুলি প্রয়োগ করুন (হেলমেট, হার সীমা, ইত্যাদি)
যাচাইকরণ
এক্সপ্রেস-ভ্যালিডেটরের মতো লাইব্রেরি ব্যবহার করে ইনপুট যাচাই করুন
নিরাপত্তা সেরা অনুশীলন
const express = require('express');
const helmet = require('helmet');
const cors = require('cors');
const app = express();
// Security middleware
app.use(helmet());
// CORS configuration
app.use(cors({
origin: 'https://example.com',
methods: ['GET', 'POST'],
allowedHeaders: ['Content-Type', 'Authorization']
}));
// Other middleware and routes
// ...